<?php
require_once 'UE/Cache/Abstract.php';
/**
 * 数据库缓存实现
 * 
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * @author cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */
class UE_Cache_DB extends UE_Cache_Abstract {
		
	public function __construct() {
	}
	
	/**
	 * 保存缓存变量
	 *
	 * @param string $key
	 * @param mixed $data
	 * @return bool
	 */
	public function store($key, $data) {
		if(empty($data)) {
			return false;
		}
		
		$key = md5($key);
		//print_r($data);
		$data['data'] = addslashes(serialize($data['data']));
		$sql = "REPLACE INTO ue_cache (cache_id, cache_dateline, cache_expire, cache_valid, cache_data)
                VALUE ('$key', '{$data['time']}', '{$data['expire']}', '{$data['valid']}', '{$data['data']}')";
		return UE_DB::factory()->query($sql);
	}
	
	/**
	 * 读取缓存
	 *
	 * @param string $key
	 * @return mixed
	 */
	public function fetch($key) {
		$key = md5($key);
		$r = UE_DB::factory()->getOne("SELECT * FROM ue_cache WHERE cache_id='{$key}'");
		$data = array();
		$data['time'] = $r['cache_dateline'];
		$data['expire'] = $r['cache_expire'];
		$data['valid'] = $r['cache_valid'];
		$data['data'] = $r['cache_data'] ? unserialize($r['cache_data']) : '';
		
		return $data;
	}
	
	/**
	 * 清除缓存
	 *
	 * @return UE_Cache_Apc
	 */
	public function clear($dir = '') {
		if ($dir) {			
			$dir = rtrim($dir, '/');
			$dir = addslashes($dir);
			UE_DB::factory()->query("DELETE FROM `ue_cache` WHERE cache_id LIKE '$dir/%'");
		} else {
			UE_DB::factory()->query("TRUNCATE TABLE `ue_cache`");
		}
		
		return $this;
	}
	
	/**
	 * 删除缓存单元
	 *
	 * @return UE_Cache_Apc
	 */
	public function delete($key) {
		UE_DB::factory()->query("DELETE FROM `ue_cache` WHERE cache_id='$key'");
	    return $this;
	}
	
	/**
	 * 缓存单元是否被锁定
	 *
	 * @param string $key
	 * @return bool
	 */
	public function isLocked($key) {
		return false;
	}
	
	/**
	 * 锁定缓存单元
	 *
	 * @param string $key
	 * @return UE_Cache_Apc
	 */
	public function lock($key) {		
		return $this;
	}
	
	/**
	 * 缓存单元解锁
	 *
	 * @param string $key
	 * @return UE_Cache_Apc
	 */
	public function unlock($key) {
		return $this;
	}
}
